//
// Created by zhku666 on 25-2-24.
//
#include <cstdio>
#include <windows.h>

// 获取锁
int get_lock() {
    FILE *file;
    char buffer[2];

    while (1) {
        // 打开文件
        file = fopen("lock.txt", "r+");
        if (!file) {
            fprintf(stderr, "获取锁失败\n");
            return -1;
        }

        // 读取文件内容
        buffer[0] = '\0';
        if (fread(buffer, sizeof(char), 1, file) != 1) {
            fprintf(stderr, "获取锁失败\n");
            fclose(file);
            return -1;
        }

        // 如果文件内容为 '0'，表示可以获取锁
        if (buffer[0] == '0') {
            // 将文件内容设置为 '1'，表示锁定
            rewind(file);
            if (fwrite("1", sizeof(char), 1, file) != 1) {
                fprintf(stderr, "获取锁失败\n");
                fclose(file);
                return -1;
            }
            fclose(file);
            return 0;
        } else {
            // 如果文件内容为 '1'，表示锁已被占用，关闭文件并重试
            fclose(file);
            Sleep(100); // 等待 100ms 后重试
        }
    }
}

// 释放锁
void unlock() {
    FILE *file;

    // 打开文件
    file = fopen("lock.txt", "w");
    if (!file) {
        fprintf(stderr, "获取锁失败\n");
        return;
    }

    // 将文件内容设置为 '0'，表示释放锁
    if (fwrite("0", sizeof(char), 1, file) != 1) {
        fprintf(stderr, "获取锁失败\n");
    }

    fclose(file);
}